﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Negocio.Interface;
using Metadados;
using Dados;

namespace Negocio
{
    public class NGTributacao
    {
        private ITCadastroTributacao telaCadastro;

        int triCodigo { get; set; }
        string triDescricao { get; set; }
        decimal triAliquota { get; set; }
        decimal triReducao { get; set; }
        string mensagem { get; set; }

        public NGTributacao(ITCadastroTributacao telaCadastroTributacao)
        {
            telaCadastro = telaCadastroTributacao;
        }

        #region Pegar e Colocar dados na Tela
        
        private Tributacao pegarDados()
        {
            return new Tributacao 
            {
                triCodigo = telaCadastro.triCodigo,
                triDescricao = telaCadastro.triDescricao,
                triAliquota = telaCadastro.triAliquota,
                triReducao = telaCadastro.triReducao
            };
        }

        private void colocarDados(Tributacao obj)
        {
            telaCadastro.triCodigo = obj.triCodigo;
            telaCadastro.triDescricao = obj.triDescricao;
            telaCadastro.triAliquota = obj.triAliquota;
            telaCadastro.triReducao = obj.triReducao;
        }
        #endregion

        #region Manipulacao

        public void gravar()
        {

            #region Validações
            if (telaCadastro.triCodigo == int.MinValue)
            {
                telaCadastro.mensagem = " O campo codigo é obrigatorio! ";
                return;
            }

            if (telaCadastro.triDescricao == string.Empty)
            {
                telaCadastro.mensagem = " O campo descrição é obrigatorio! ";
                return;
            }

            if (telaCadastro.triAliquota == decimal.MinValue)
            {
                telaCadastro.mensagem = " O campo aliquota é obrigatorio! ";
                return;
            }

            if (telaCadastro.triReducao == decimal.MinValue)
            {
                telaCadastro.mensagem = " O campo redução é obrigatorio! ";
                return;
            }

            # endregion

            DBTributacao objDados = new DBTributacao();

            Tributacao objTributacao = new Tributacao();

            objTributacao = pegarDados();

            if (!consultar(objTributacao.triCodigo))
            {
                if (objDados.incluir(objTributacao))
                {
                    telaCadastro.mensagem = "Tributação cadastrada com sucesso!";
                    limpaTela();
                }
                else
                {
                    telaCadastro.mensagem = "Erro no cadastro da tributação!";
                }
            }
            else
            {
                if (objDados.atualizar(objTributacao))
                {
                    colocarDados(objTributacao);
                    telaCadastro.mensagem = "Tributação alterada com sucesso!";
                    limpaTela();
                }
                else
                {
                    telaCadastro.mensagem = "Erro ao alterar a tributação!";
                }
            }
                 
            }

        public void deletar(int p_triCodigo)
        {
            DBTributacao objDados = new DBTributacao();

            if (objDados.excluir(p_triCodigo))
            {
                telaCadastro.mensagem = "Tributação excluida com sucesso!";
            }
            else
            {
                telaCadastro.mensagem = "Tributação não pode ser excluida!";
            }

            limpaTela();
        }

        public void limpaTela()
        {
            telaCadastro.triCodigo = int.MinValue;
            telaCadastro.triDescricao = string.Empty;
            telaCadastro.triAliquota = decimal.MinValue;
            telaCadastro.triReducao = decimal.MinValue;
        }

        public bool consultar(int p_triCodigo)
        {
            DBTributacao objDados = new DBTributacao();

            try
            {
                colocarDados(objDados.consultar(p_triCodigo)[0]);
                return true;
            }
            catch (Exception)
            {

                return false;
            }

        }

        #endregion
    }
}
